package main

import "fmt"

//定义一个接口 SayHello
type SayHello interface {
	say()
}

//定义一个结构体 中国人
type Chinese struct {
	Name string
}

//实现SayHello接口
func (c Chinese) say() {
	fmt.Println("你好，我是", c.Name)
}

//扭腰歌，中国人特有的方法
func (c Chinese) dance() {
	fmt.Println("扭腰歌")
}

//定义一个结构体 美国人
type American struct {
	Name string
}

//实现SayHello接口
func (a American) say() {
	fmt.Println("Hello, I'm", a.Name)
}

//disco
func (a American) disco() {
	fmt.Println("disco")
}

//自定义数据类型
type integer int

func (i integer) say() {
	fmt.Println("Hello, 我是一个int")
}

func greet(s SayHello) {
	s.say()
	//断言
	// if v, ok := s.(Chinese); ok {
	// 	v.dance()
	// }

	switch v := s.(type) {
	case Chinese:
		v.dance()
	case American:
		v.disco()
	default:
		fmt.Println("不知道是什么类型")
	}
}

func main() {
	//定义一个接口变量
	var s SayHello
	//实例化一个中国人
	c := Chinese{"张三"}
	//将接口变量指向c
	s = c
	//调用say方法
	s.say()

	//实例化一个美国人
	a := American{"Tom"}
	//将接口变量指向a
	s = a
	//调用say方法
	s.say()

	//实例化一个int
	var i1 integer = 10
	var s1 SayHello = i1
	//调用say方法
	s1.say()

	//定义一个接口数组
	var arr [3]SayHello
	arr[0] = c
	arr[1] = a
	arr[2] = i1
	fmt.Println(arr)
}
